/*
 * -------------------------------------------------------------
 *  FECHA      HORA     NOMBRE           COMENTARIO
 * -------------------------------------------------------------
 *  14/05/08   17:39    DAVID           Creación de interface.
 *  15/05/08   10:41    ALEX            Añadidas notas de programación
 *					y control de versiones
 *  21/05/08   20:01    ALEX            Añadidos metodos getNumeroInici y
 *                                      getNumeroFi con su documentación.                   
 *  30/05/08   00:05    ALEX            Incluir metodos SET.
 * 
 */

package net.ieslaferreria.infoCiutat;

import org.garret.perst.IPersistent;



/** 
 * Interficie que representa el camí que hi ha d'un punt a un altre.
 *
 * @author David Maqueda, Javi Xaranda, Alex Fernández, Sergio Soria.
 */
public interface Aresta extends IPersistent{
       
    /** 
     * Retorna l'atribut codi que determina el codi identificatiu de
     * l'aresta.
     * 
     * @return int
     */
    public int getCodi();
    
    /**
     * Estableix el valor de l'atribut codi.
     * 
     * @param codi
     */
    public void setCodi(int codi);
     
    /** 
     * Retorna l'atribut nom que determina el nom identificatiu de
     * l'aresta.
     * 
     * @return String
     */
    public String getNom();
    
    /**
     * Estableix el valor de l'atribut del nom.
     * 
     * @param nom
     */
    public void setNom(String nom);

    /** 
     * Retorna l'atribut temps que especifica el temps que es tarda
     * en recorrer l'aresta.
     * 
     * @return int
     */
    public int getTemps();
    
    /**
     * Estableix un valor per l'atribut temps.
     * 
     * @param temps
     */
    public void setTemps(int temps);

    /** 
     * Retorna l'atribut puntInici que determia el punt on comença
     * l'aresta.
     * 
     * @return Punt
     */
    public Punt getPuntInici();
    
    /**
     * Estableix el valor de l'atribut puntInici.
     * 
     * @param puntInici
     */
    public void setPuntInici(Punt puntInici);

    /** 
     * Retorna l'atribut puntFinal que determia el punt on acaba
     * l'aresta.
     * 
     * @return Punt
     */
    public Punt getPuntFinal();
    
    /**
     * Estableix el valor de l'atribut puntFinal
     * 
     * @param puntFinal
     */
    public void setPuntFinal(Punt puntFinal);

    /**
     * Retorna l'atribut distancia que determina la distancia entre
     * el punt inici i la porta que li passem per parametre. Retornarà
     * un nombre negatiu si la porta no es troba a l'aresta.
     * 
     * @param numero de porta.
     * @return int
     */
  /*
     * Primer agafem la distancia de l'aresta i la dividirem entre 
     * la resta del numeroFinal i el numeroInici. Desprès  multipliquem
     * la distancia de l'illa per la resta del numero del parametre
     * menys el numeroInici.
     * 
     * Excepció: Si per error es busca un numero de porta que no
     * pertany a l'aresta retornarem un nombre negatiu.
     */
    public int getDistanciaPorta(int numero);

    /** 
     * Retorna l'atribut distancia que determina la distancia entre els 
     * dos punts de l'aresta. l'aresta.
     * 
     * @return int
     */
  /*
     * Excepció: Si l'atribut distancia es null executarem el metode
     * calculaDistancia guardarem el resultat a l'atribut distancia.
     */
    public int getDistancia();
    
    /**
     * Estableix el valor de l'atribut distancia
     * 
     * @param distancia
     */
    public void setDistancia(int distancia);

    /** 
     * Retorna un Boolean comprobant si els dos punts de l'aresta
     * pertanyen a la mateixa linea.
     * 
     * @return boolean
     */
    public boolean hiHaTransbord();
    
    /**
     * Retorna un Boolean comprobant si els dos punts de l'aresta
     * pertanyen a la mateixa xarxa.
     * 
     * @return boolean
     */
    public boolean hiHaCanviDeXarxa();
    
    /**
     * Retorna el numero de porta amb la que s'inicia l'aresta quan es
     * tracta d'un carrer. En cas de que no sigui un carrer retorna 0.
     * 
     * @return int
     */
    public int getNumeroInici();
    
    /**
     * Estableix el valor de l'atribut numInici.
     * 
     * @param numInici
     */
    public void setNumeroInici(int numInici);
    
    /**
     * Retorna el numero de porta amb el que s'acaba l'aresta quan es tracta
     * d'un carrer. En cas de que no sigui un carrer retorna 0.
     * 
     * @return int
     */
    public int getNumeroFinal();
    
    /**
     * Estableix el valor de l'atribut numeroFinal.
     * 
     * @param numeroFinal
     */
    public void setNumeroFinal(int numeroFinal);

    /**
     * Diu si l'aresta es de sentit únic o de doble sentit
     * 
     * @return Boolean
     */
    public boolean esDeDobleSentit();
    
    /**
     * Estableix el valor de l'atribut dobleSentit.
     * 
     * @param esDobleSentit
     */
    public void setDobleSentit(boolean esDobleSentit);
}
